# 2、编写Computer类，包含CPU、内存、硬盘等属性
# 1)get_details方法用于返回Computer的详细信息
# 2)编写PC子类，继承Computer类，添加特有属性【品牌brand】
# 3)编写NotePad子类，继承Computer类，添加特有属性【color】
# 4)完成测试，创建PC和NotePad对象，分别给对象中特有的属性赋值，以及从Computer类继承的属性赋值，并使用方法打印输出信息
# 定义Computer类，表示计算机的基本构成
class Computer:
    # 类变量，表示CPU型号
    cpu = None
    # 类变量，表示内存容量
    memory = None
    # 类变量，表示硬盘容量
    hard_disk = None

    # 构造方法，初始化计算机的硬件配置
    def __init__(self, cpu, memory, hard_disk):
        self.cpu = cpu
        self.memory = memory
        self.hard_disk = hard_disk

    # 获取计算机的详细配置信息
    def get_details(self):
        return f"{self.cpu} {self.memory} {self.hard_disk}"


# 定义PC类，继承自Computer类，表示个人电脑
class PC(Computer):
    # 类变量，表示电脑品牌
    brand = None

    # 构造方法，初始化个人电脑的硬件配置和品牌
    def __init__(self, cpu, memory, hard_disk, brand):
        # 子类属性初始化方式1
        # self.cpu = cpu
        # self.memory = memory
        # self.hard_disk = hard_disk
        # self.brand = brand

        # 子类属性初始化方式2
        # 使用super关键字调用父类的构造方法
        # super().__init__(cpu, memory, hard_disk)
        super().__init__(cpu, memory, hard_disk)  # 调用父类构造方法初始化硬件配置
        self.brand = brand

    # 打印个人电脑的详细信息
    def printInfo(self):
        print(f"{self.brand} {self.get_details()}")


# 定义NotePad类，继承自Computer类，表示笔记本电脑
class NotePad(Computer):
    # 类变量，表示笔记本的颜色
    color = None

    # 构造方法，初始化笔记本电脑的硬件配置和颜色
    def __init__(self, cpu, memory, hard_disk, color):
        super().__init__(cpu, memory, hard_disk)  # 调用父类构造方法初始化硬件配置
        self.color = color

    # 打印笔记本电脑的详细信息
    def printInfo(self):
        print(f"{self.color} {self.get_details()}")


# 实例化一个个人电脑对象，并调用printInfo方法打印信息
pc = PC("i5", "8G", "1T", "HP")
pc.printInfo()

# 实例化一个笔记本电脑对象，并调用printInfo方法打印信息
n = NotePad("i7", "16G", "2T", "red")
n.printInfo()
